package ace.module.upms.api;

import ace.cmp.core.model.R;
import ace.cmp.sdk.api.SdkApi;
import ace.module.common.api.model.input.AppIdListInput;
import ace.module.upms.api.model.dto.UpmsOrganizationDto;
import ace.module.upms.api.model.input.UpmsOrgBindAccountInput;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;

/**
 * 组织 api.
 *
 * @author Caspar
 */
public interface UpmsOrganizationApi extends SdkApi<UpmsOrganizationDto, Long> {


  /**
   * 查询指定账户关联的组织.
   *
   * @param upmsAppId 权限应用id
   * @param iamAccountIds 账户id
   * @return 账户关联的组织 key=accountId value = 角色数据
   */
  R<Map<Long, List<UpmsOrganizationDto>>> getAccountIdAndOrgMapByUpmsAppIdAndIamAccountIdIn(@Valid @NotNull Long upmsAppId, @Valid @NotEmpty List<Long> iamAccountIds);

  /**
   * 查询指定账户关联的组织.
   *
   * @param upmsAppId 权限应用id
   * @param iamAccountId 账户id
   * @return 账户关联的组织
   */
  R<List<UpmsOrganizationDto>> getByUpmsApIdAndIamAccountId(@Valid @NotNull Long upmsAppId, @Valid @NotNull Long iamAccountId);

  /**
   * 保存组织与账户绑定关系,以当前数据为准,含新增、修改、删除操作.
   *
   * @param inputs 组织与账户绑定关系
   * @return code=0 success
   */
  R<Void> saveOrgAccountRelation(@Valid @NotNull AppIdListInput<UpmsOrgBindAccountInput> inputs);

}